package com.beemans.common.utils.permissions

import com.hjq.permissions.Permission

/**
 * @author tiamosu
 * @date 2022/5/7.
 *
 * 权限错误检测类
 * TODO 注意：实时同步[com.hjq.permissions.PermissionChecker]
 */
object PermissionChecker {

    /**
     * 处理和优化已经过时的权限
     *
     * @param requestPermissions            请求的权限组
     */
    fun optimizeDeprecatedPermission(requestPermissions: MutableList<String>) {
        // 如果本次申请包含了 Android 12 蓝牙扫描权限
        if ((!AndroidVersion.isAndroid12()
                    && requestPermissions.contains(Permission.BLUETOOTH_SCAN)
                    && !requestPermissions.contains(Permission.ACCESS_FINE_LOCATION))
        ) {
            // 这是 Android 12 之前遗留的问题，扫描蓝牙需要精确定位权限
            requestPermissions.add(Permission.ACCESS_FINE_LOCATION)
        }

        // 如果本次申请包含了 Android 11 存储权限
        if (requestPermissions.contains(Permission.MANAGE_EXTERNAL_STORAGE)) {
            if (requestPermissions.contains(Permission.READ_EXTERNAL_STORAGE)
                || requestPermissions.contains(Permission.WRITE_EXTERNAL_STORAGE)
            ) {
                // 检测是否有旧版的存储权限，有的话直接抛出异常，请不要自己动态申请这两个权限
                throw IllegalArgumentException(
                    "If you have applied for MANAGE_EXTERNAL_STORAGE permissions, " +
                            "do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions"
                )
            }
            if (!AndroidVersion.isAndroid11()) {
                // 自动添加旧版的存储权限，因为旧版的系统不支持申请新版的存储权限
                requestPermissions.add(Permission.READ_EXTERNAL_STORAGE)
                requestPermissions.add(Permission.WRITE_EXTERNAL_STORAGE)
            }
        }
        if ((!AndroidVersion.isAndroid8()
                    && requestPermissions.contains(Permission.READ_PHONE_NUMBERS)
                    && !requestPermissions.contains(Permission.READ_PHONE_STATE))
        ) {
            // 自动添加旧版的读取电话号码权限，因为旧版的系统不支持申请新版的权限
            requestPermissions.add(Permission.READ_PHONE_STATE)
        }
        if ((!AndroidVersion.isAndroid10()
                    && requestPermissions.contains(Permission.ACTIVITY_RECOGNITION)
                    && !requestPermissions.contains(Permission.BODY_SENSORS))
        ) {
            // 自动添加传感器权限，因为 ACTIVITY_RECOGNITION 是从 Android 10 开始才从传感器权限中剥离成独立权限
            requestPermissions.add(Permission.BODY_SENSORS)
        }
    }
}